@startuml
title Auth

hide members

package "Auth UI" #DDDDDD {
    class AuthViewController
    class AuthViewModel
    class AuthLoginViewController
    class AuthLoginViewModel
    class AuthSignupViewController
    class AuthSignupViewModel
    class AuthForgotPasswordViewController
    
    AuthViewController *-- AuthViewModel
    AuthViewController *-- AuthLoginViewController
    AuthViewController *-- AuthSignupViewController
    AuthLoginViewController *-- AuthLoginViewModel
    AuthSignupViewController *-- AuthSignupViewModel
    AuthLoginViewController *-- AuthForgotPasswordViewController
}

package "Auth Module" #DDDDDD {
    class AuthManager
    class AppleAuthModule
    class FirebaseAuthModule
    class FacebookAuthModule
    class GoogleAuthModule
    class WebAuthModule
    class NotRequiredAuthModule
    AuthViewModel --> AuthManager
    AuthLoginViewModel --> AuthManager
    AuthSignupViewModel --> AuthManager
    AuthForgotPasswordViewController --> AuthManager
    AuthManager *-- FirebaseAuthModule
    FirebaseAuthModule *-- AppleAuthModule
    FirebaseAuthModule *-- FacebookAuthModule
    FirebaseAuthModule *-- GoogleAuthModule
    AuthManager *-- WebAuthModule
    AuthManager *-- NotRequiredAuthModule
}

package "App State" #DDDDDD {
    class AppStateHolder
    WebAuthModule --> AppStateHolder
    WebAuthModule --> AppStateHolder
    WebAuthModule --> AppStateHolder
}

package "Firebase" #DDDDDD {
    class FirebaseAuth
    FirebaseAuthModule --> FirebaseAuth
}

package "SDK" #DDDDDD {
    class Audiorista
    WebAuthModule --> Audiorista
}


@enduml
